package com.framework.bas.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import com.framework.bas.param.QueryParam;
import com.framework.dbs.vo.BaseObject;

public interface IPlmBasDAO {
	
	public static final String BEAN_ID="apiBasDAO";
	
	/**
	 * 平台框架通过ID查询Hibernate对象
	 * @return
	 */
	public <T extends BaseObject> T queryById(Class<T> clazz,Serializable id);
	
	/**
	 * 平台框架Hibernate对象保存
	 * @param BaseObject
	 * @return int
	 */
	public int save(BaseObject object);

	/**
	 * 平台框架Hibernate对象批量保存
	 * @param List
	 * @return int
	 */
	public <T extends BaseObject> int saveByBatch(List<T> list);

	/**
	 * 平台框架Hibernate对象更新
	 * @param BaseObject
	 * @return
	 */
	public int update(BaseObject object);

	/**
	 * 平台框架Hibernate对象批量更新
	 * @param List
	 * @return int
	 */
	public <T extends BaseObject> int updateByBatch(List<T> list);

	/**
	 * 平台框架Hibernate-NamedQuery更新
	 * @param queryId
	 * @param param
	 * @return int
	 */
	public int updateHiberateByNamedQuery(String queryId,Object[] param);
	
	/**
	 * 平台框架Hibernate对象删除
	 * @param BaseObject
	 * @return int
	 */
	public int delete(BaseObject object);
	
	/**
	 * 平台框架Hibernate对象批量删除
	 * @param List
	 * @return
	 */
	public <T extends BaseObject> int deleteByBatch(List<T> list);
	
	/**
	 * 通过iBatis进行新建操作。
	 * @param statementId
	 * @param Object[]
	 * @return
	 */
	public int insertIbatisObj(String statementId, Object[] values);

	/**
	 * 通过iBatis进行删除操作。
	 * @param statementId
	 * @param Object[]
	 * @return
	 */
	public int deleteIbatisObj(String statementId, Object[] values);

	/**
	 * 通过iBatis进行修改操作。
	 * @param statementId
	 * @param Object[]
	 * @return
	 */
	public int updateIbatisObj(String statementId, Object[] values);
	
	/**
	 * 平台框架封装通用查询记录列表
	 * @param QueryParam
	 * @return List
	 */
	public <T> List<T> query(QueryParam qp);
	
	/**
	 * 平台框架封装通用查询记录列表
	 * @param params Map
	 * @return List
	 */
	public <T> List<T> query(String statementId, Object params );

	/**
	 * 平台框架封装通用查询总记录数
	 * @param QueryParam
	 * @return int
	 */
	public int querySize(QueryParam qp);
	
	/**
	 * 平台框架封装通用查询总记录数
	 * @param params Map
	 * @return int
	 */
	public int querySize(String statementId, Object params);
	
	/**
	 * 平台框架封装通用单记录查询
	 * @param QueryParam
	 * @return Object
	 */
	public <T> T queryOne(QueryParam qp);
	
	/**
	 * 平台框架封装通用单记录查询
	 * @param params	Map
	 * @return Object
	 */
	public <T> T queryOne(String statementId, Object params);
	
	/**
	 * 平台框架封装执行存储过程
	 * @param String 过程名称
	 * @param Map 系统参数
	 * @return Map 过程结果
	 */
	@SuppressWarnings("unchecked")
	public Map runProcedure(String procedureName, Map param);
	
}
